Программирование драйверов Windows

Секция [AddReg]


Секции типа [AddReg] содержат описание действий по внесению новых подразделов и/или параметров и их значений в Системный Реестр, а также действия по модификации значений уже существующих параметров.

Ссылки на секции данного типа могут присутствовать в секциях [DDInstall], [ClassInstall32] и секциях [ServiceInstall] (обозначенных ссылками из директив AddService в секциях [DDInstall.Services]). Кроме того, ссылка на [AddReg] может быть введена и из секций, описывающих установку интерфейса (для организации доступа к объекту устройства по идентификатору интерфейса), что в данной книге не рассматривается. В перечисленных типах секций ссылки на [AddReg] вводятся директивами AddReg. Конкретное имя секций типа [AddReg] зависит от разработчика inf-файла. Каждая запись внутри секции [AddReg] имеет вид

reg-root, [subkey], [value-name], [flag] , [value]

Здесь в поле reg-root следует ввести аббревиатуру одного из корневых разделов Системного Реестра, возможные значения которых перечислены в таблице 12.7. Эти значения указывают на корневые разделы, в чьих подразделах будут сделаны изменения. Поле subkey представляет наименование подраздела внутри указанного корневого раздела. Значении HKR не имеет конкретного, раз и навсегда определенного, значения. Его конечное значение в записях секции [AddReg] зависит от того, из какой секции была сделана ссылка на [AddReg].

Таблица 12.7. Аббревиатуры корневых разделов Системного Реестра



Значения Описание
HKCR HKEY_CLASSES_ROOT
HKCU HKEY_CURRENT_USER
HKLM HKEY_LOCAL_MACHINE
HKU HKEY_USERS
HKR Контекстный раздел Системного Реестра (то есть какой конкретно раздел Реестра будет модифицирован, зависит от того, в какой секции была сделана ссылка на секцию типа [AddReg])

Значение value-name обозначает имя параметра в модифицируемом подразделе subkey, который (параметр подраздела, то есть) будет добавлен или модифицирован.

Значение flag описывает тип данных, который должен быть сохранен в поле значения параметра данного модифицируемого подраздела Системного Реестра.
Возможные значения (из числа применимых в Windows 2000, XP и 2003), которые может принимать поле flag, перечисляются в таблице 12.8.

Таблица 12.8. Основные значение поля flag

в записях секции [AddReg]

Значение Символьное имя Описание
0x00000 FLG_ADDREG_TYPE_SZ Строка символов, завершающаяся нулем (значение flag по умолчанию, если это поле в записи опущено)
0x00001 FLG_ADDREG_BINVALUETYPE Бинарные данные
0x00002 FLG_ADDREG_NOCLOBBER Не замещать существующее значение
0x00004 FLG_ADDREG_DELVALUE Стереть подраздел или параметр
0x00010 FLG_ADDREG_KEYONLY Создать подраздел, игнорировать параметр и его значение
0x00020 FLG_ADDREG_OVERWRITEONLY Если параметр существует, заменить, иначе ничего не предпринимать
0x10000 FLG_ADDREG_TYPE_MULTI_SZ Данные REG_MULTI_SZ (массив строк)
0x00008 FLG_ADDREG_APPEND Присоединить к существующему массиву строк REG_MULTI_SZ. Применим только совместно с FLG_ADDREG_TYPE_MULTI_SZ
0x20000 FLG_ADDREG_TYPE_EXPAND_SZ Данные типа REG_EXPAND_SZ
0x10001 FLG_ADDREG_TYPE_DWORD Данные типа REG_DWORD
0x20001 FLG_ADDREG_TYPE_NONE Данные REG_NONE
Значения flag в inf-файлах должны указываться собственно в числовом значении (символьные имена, указанные в таблице 12.8 не применяются). Однако при желании, для улучшения читаемости inf-файла, можно применять маркеры, например:

[DeviceInstallSection] AddReg = DeviceAddRegSection

[DeviceAddRegSection] HKR,, ThisDriver, %REG_DWORD%, 1 HKR,, InstalledDrivers, %REG_MULTI_SZ%, Device0001

[Strings] ; расшифровка значений маркеров REG_SZ = 0x00000000 REG_MULTI_SZ = 0x00010000 REG_EXPAND_SZ = 0x00020000 REG_BINARY = 0x00000001 REG_DWORD = 0x00010001

Следует помнить, что в том случае, если в полях записей вводится значение, содержащее пробелы или другие специальные символы, то эту группу символов следует заключить в кавычки. Если же значение простое (пусть даже строка), то его заключать в кавычки не обязательно, например:

[MyDriver.Install] CopyFiles=. . .AddReg=MyDriver.AddReg

[MyDriver.AddReg] HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,, MyDriver.sys ; (flag = FLG_ADDREG_TYPE_SZ)

что равносильно

HKR,,"NTMPDriver",,"MyDriver.sys"


Содержание раздела